from rest_framework import serializers
from django_redis import get_redis_connection

class RegisterSmsCodeSerializer(serializers.Serializer):
    """
    验证4种方式
    1字段类型验证
    2选项验证
    3单个字段验证
    4多个字段验证
    """
    text = serializers.CharField(label='图片验证码',max_length=4,min_length=4,required=True)
    image_code_id = serializers.UUIDField(label='uuid')

    def validate(self,attrs):

        #1得到用户输入的验证码
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        #2得到redis的验证码
        redis_conn = get_redis_connection('code')
        redis_text = redis_conn.get('img_%s' % image_code_id)
        # 判断从redis中获取的验证码是否存在
        if redis_text is None:
             raise serializers.ValidationError('验证码已过期')

        #3对比
        # 对redis的验证码编码之后进行比对,要注意大小写问题
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('验证码错误')

        return attrs
        #query_params data-->attrs

